#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
初始化数据脚本
用于向数据库添加测试数据（轮播图、分类、技师、服务）
"""
import os
import sys
import django

# 设置UTF-8编码输出
if sys.platform == 'win32':
    import io
    sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')

# 设置Django环境
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
sys.path.append(BASE_DIR)
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'massage_app.settings')
django.setup()

from services.models import Banner, Category, Technician, Service
from decimal import Decimal

def init_banners():
    """初始化轮播图数据"""
    print("\n开始初始化轮播图...")
    
    # 清空现有数据（可选）
    # Banner.objects.all().delete()
    
    banners_data = [
        {
            'title': '全身按摩放松',
            'description': '专业技师上门服务',
            'image': '/assets/images/banner1.png',  # 使用小程序本地路径
            'link': '',
            'sort_order': 1,
            'is_active': True
        },
        {
            'title': '足疗养生',
            'description': '传统中医按摩',
            'image': '/assets/images/banner2.png',  # 使用小程序本地路径
            'link': '',
            'sort_order': 2,
            'is_active': True
        }
    ]
    
    for data in banners_data:
        banner, created = Banner.objects.get_or_create(
            title=data['title'],
            defaults=data
        )
        if created:
            print(f"  [OK] 创建轮播图: {banner.title}")
        else:
            print(f"  [SKIP] 轮播图已存在: {banner.title}")
    
    print(f"轮播图初始化完成！当前共有 {Banner.objects.count()} 条数据")


def init_categories():
    """初始化服务分类数据"""
    print("\n开始初始化服务分类...")
    
    categories_data = [
        {
            'name': 'massage',
            'icon': '/assets/icons/home.png',  # 临时使用，后续替换
            'sort_order': 1,
            'is_active': True
        },
        {
            'name': 'spa',
            'icon': '/assets/icons/order.png',  # 临时使用，后续替换
            'sort_order': 2,
            'is_active': True
        },
        {
            'name': 'footcare',
            'icon': '/assets/icons/wallet.png',  # 临时使用，后续替换
            'sort_order': 3,
            'is_active': True
        },
        {
            'name': 'bodycare',
            'icon': '/assets/icons/profile.png',  # 临时使用，后续替换
            'sort_order': 4,
            'is_active': True
        }
    ]
    
    for data in categories_data:
        category, created = Category.objects.get_or_create(
            name=data['name'],
            defaults=data
        )
        if created:
            print(f"  [OK] 创建分类: {category.get_name_display()}")
        else:
            print(f"  [SKIP] 分类已存在: {category.get_name_display()}")
    
    print(f"服务分类初始化完成！当前共有 {Category.objects.count()} 条数据")


def init_technicians():
    """初始化技师数据"""
    print("\n开始初始化技师数据...")
    
    technicians_data = [
        {
            'name': '张技师',
            'avatar': '/assets/images/technician1.png',
            'rating': Decimal('4.8'),
            'order_count': 128,
            'is_active': True
        },
        {
            'name': '李技师',
            'avatar': '/assets/images/technician2.png',
            'rating': Decimal('4.9'),
            'order_count': 96,
            'is_active': True
        },
        {
            'name': '王技师',
            'avatar': '/assets/images/technician3.png',
            'rating': Decimal('4.7'),
            'order_count': 142,
            'is_active': True
        }
    ]
    
    for data in technicians_data:
        technician, created = Technician.objects.get_or_create(
            name=data['name'],
            defaults=data
        )
        if created:
            print(f"  [OK] 创建技师: {technician.name}")
        else:
            print(f"  [SKIP] 技师已存在: {technician.name}")
    
    print(f"技师数据初始化完成！当前共有 {Technician.objects.count()} 条数据")


def init_services():
    """初始化服务项目数据"""
    print("\n开始初始化服务项目...")
    
    services_data = [
        {
            'name': '全身放松按摩',
            'category': 'massage',
            'description': '专业技师提供全身按摩服务，缓解疲劳，放松身心',
            'duration': 60,
            'price': Decimal('198.00'),
            'image': '/assets/images/service1.png',
            'is_active': True
        },
        {
            'name': '足底按摩',
            'category': 'footcare',
            'description': '传统中医足底按摩，促进血液循环，改善睡眠',
            'duration': 45,
            'price': Decimal('128.00'),
            'image': '/assets/images/service2.png',
            'is_active': True
        },
        {
            'name': 'SPA水疗',
            'category': 'spa',
            'description': '高端SPA水疗服务，深层清洁，美容养颜',
            'duration': 90,
            'price': Decimal('298.00'),
            'image': '/assets/images/service3.png',
            'is_active': True
        }
    ]
    
    for data in services_data:
        service, created = Service.objects.get_or_create(
            name=data['name'],
            defaults=data
        )
        if created:
            print(f"  [OK] 创建服务: {service.name} - ¥{service.price}")
        else:
            print(f"  [SKIP] 服务已存在: {service.name}")
    
    print(f"服务项目初始化完成！当前共有 {Service.objects.count()} 条数据")


def main():
    """主函数"""
    print("=" * 60)
    print("开始初始化数据库测试数据".center(60))
    print("=" * 60)
    
    try:
        # 初始化各类数据
        init_banners()
        init_categories()
        init_technicians()
        init_services()
        
        print("\n" + "=" * 60)
        print("[SUCCESS] 所有数据初始化完成！".center(60))
        print("=" * 60)
        
        # 显示统计信息
        print("\n[数据统计]")
        print(f"  - 轮播图: {Banner.objects.count()} 条")
        print(f"  - 服务分类: {Category.objects.count()} 条")
        print(f"  - 技师: {Technician.objects.count()} 条")
        print(f"  - 服务项目: {Service.objects.count()} 条")
        
        print("\n[下一步]")
        print("  1. 在浏览器访问: http://localhost:8000/api/services/app-images/")
        print("  2. 检查返回的JSON数据是否正确")
        print("  3. 在小程序中刷新首页，数据应该自动加载")
        print()
        
    except Exception as e:
        print(f"\n[ERROR] 初始化失败: {e}")
        import traceback
        print(traceback.format_exc())
        sys.exit(1)


if __name__ == '__main__':
    main()

